#ifndef __studies_architecture_transmitting__local_access_controller__h__
#define __studies_architecture_transmitting__local_access_controller__h__



/** @file */


/** @todo */

// ==> C++ Headers
#include <string>
#include <iostream>

// ==> 3rds Headers

// ==> Our Headers
#include <studies.architecture.returns/codes.h>
#include <studies.architecture.processing/access_controller.h>

// ==> Namespaces
using namespace std;

// ==> Macro Constants

// ==> Macro Commands


/** ==> namespace of the organization */
namespace studies {
    /** ==> namespace for the project */
    namespace architecture {
        /** ==> displaying, interacting, translation, message, processor, object, storer */
        namespace transmitting {

            // ==> Typedefs 

            // ==> Pre-Declarations

            // ==> Attributes 

            // ==> Functions

            // ==> Classes

            /** 
                @nosubgrouping 
            */
            template <typename t_supplier>
            class local_access_controller {

                // ==> local_access_controller - Friends

                /** Class allowed to access private members of @p
                    local_access_controller, in order to perform tests */
                friend class local_access_controller_tester;

            public:

                // ==> local_access_controller - Public Internal Types

                /** */
                typedef t_supplier supplier;

                /** */
                typedef typename supplier::access_controller_processer processer;
                

                // ==> local_access_controller - Public Constructors

                local_access_controller()
                    : m_processer() {}
                

                /** Destructor */
                ~local_access_controller( ) {}

                // ==> local_access_controller - Public Accessors

                // ==> local_access_controller - Public Helpers

                // ==> local_access_controller - Public Processors

                /** */
                returns::codes is_access_valid(const std::string & p_login,
                                               const std::string & p_pwd) {
                    
                    return m_processer.is_access_valid(p_login, p_pwd);
                }

                // ==> local_access_controller - Public Operators

                // ==> local_access_controller - Public Attributes

            private:

                // ==> local_access_controller - Private Internal Types

                // ==> local_access_controller - Private Constructors

                // ==> local_access_controller - Private Accessors

                // ==> local_access_controller - Private Helpers

                // ==> local_access_controller - Private Processors

                // ==> local_access_controller - Private Operators

                // ==> local_access_controller - Private Attributes

                /**  */
                processer m_processer;
                
            };
        }
    }
}
// =============================================================================
// I M P L E M E N T A T I O N
// =============================================================================

using namespace studies::architecture::transmitting;

#endif
